// 注意：这个文件是为了在浏览器中使用TextDecoder和TextEncoder API
// 现代浏览器已经内置了这些API，但我们添加这个文件以确保兼容性
// 并提供额外的编码支持

// 如果需要支持更多编码，可以引入第三方库如text-encoding或iconv-lite
// 但这需要额外的配置和打包处理

export async function detectEncoding(buffer: ArrayBuffer): Promise<string> {
  // 简单的编码检测逻辑
  // 这只是一个基本实现，实际应用中可能需要更复杂的检测算法

  // 检查UTF-8 BOM
  const bytes = new Uint8Array(buffer.slice(0, 4))
  if (bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf) {
    return "UTF-8"
  }

  // 检查UTF-16 BOM (LE)
  if (bytes[0] === 0xff && bytes[1] === 0xfe) {
    return "UTF-16LE"
  }

  // 检查UTF-16 BOM (BE)
  if (bytes[0] === 0xfe && bytes[1] === 0xff) {
    return "UTF-16BE"
  }

  // 检查UTF-32 BOM (LE)
  if (bytes[0] === 0xff && bytes[1] === 0xfe && bytes[2] === 0x00 && bytes[3] === 0x00) {
    return "UTF-32LE"
  }

  // 检查UTF-32 BOM (BE)
  if (bytes[0] === 0x00 && bytes[1] === 0x00 && bytes[2] === 0xfe && bytes[3] === 0xff) {
    return "UTF-32BE"
  }

  // 如果没有BOM，尝试检测中文编码
  // 这里使用一个简单的启发式方法：检查是否有大量的高位字节
  // 这可能表明是中文编码如GBK或GB2312

  const fullBytes = new Uint8Array(buffer)
  let highByteCount = 0

  for (let i = 0; i < Math.min(fullBytes.length, 1000); i++) {
    if (fullBytes[i] > 127) {
      highByteCount++
    }
  }

  // 如果高位字节比例较高，可能是中文编码
  if (highByteCount > 100) {
    // 尝试区分GBK和UTF-8
    // UTF-8的多字节字符有特定模式
    let isUtf8 = true
    for (let i = 0; i < fullBytes.length - 2; i++) {
      // 检查UTF-8的多字节字符模式
      if (fullBytes[i] >= 0xe0 && fullBytes[i] <= 0xef) {
        if (
          !(
            fullBytes[i + 1] >= 0x80 &&
            fullBytes[i + 1] <= 0xbf &&
            fullBytes[i + 2] >= 0x80 &&
            fullBytes[i + 2] <= 0xbf
          )
        ) {
          isUtf8 = false
          break
        }
      }
    }

    return isUtf8 ? "UTF-8" : "GBK"
  }

  // 默认返回UTF-8
  return "UTF-8"
}

export async function decodeText(buffer: ArrayBuffer, encoding: string): Promise<string> {
  try {
    const decoder = new TextDecoder(encoding)
    return decoder.decode(buffer)
  } catch (error) {
    console.error(`Error decoding with ${encoding}:`, error)
    // 如果指定编码失败，尝试使用UTF-8
    return new TextDecoder("UTF-8").decode(buffer)
  }
}
